xacro hello
basic xacro tags
Table of Content
Install#
sudo apt install ros-<version>-xacro
usage#
xacro hello.xacro > hello.xml
include#
include other xacro file
<xacro:include filename="other_file.xacro" />
<xacro:include filename="$(cwd)/other_file.xacro" />
#
<xacro:include filename="other_file.xacro" />
<xacro:include filename="$(cwd)/other_file.xacro" />
args#
- decalre
arg argusage
demo
Note
passing argument from cli
demo result#
# run without argument
xacro hello.xacro > hello.xml
# run with argument
xacro hello.xacro > hello.xml var:=10
<?xml version="1.0" ?>
<!-- =================================================================================== -->
<!-- | This document was autogenerated by xacro from /home/user/projects/blog/examples/gazebo/xacro/hello.xacro | -->
<!-- | EDITING THIS FILE BY HAND IS NOT RECOMMENDED | -->
<!-- =================================================================================== -->
<robot name="">
<data>10</data>
</robot>
property#
property
<?xml version="1.0"?>
<robot name="prop" xmlns:xacro="http://www.ros.org/wiki/xacro">
<xacro:property name="prop1" value="0.1" />
<data>${prop1}</data>
</robot>
output#
<?xml version="1.0" ?>
<robot name="prop">
<data>0.1</data>
</robot>
condition#
macro
<?xml version="1.0"?>
<robot name="condition" xmlns:xacro="http://www.ros.org/wiki/xacro">
<xacro:property name="check" value="2" />
<xacro:if value="${check == 1}">
code for create A
</xacro:if>
<!-- run if condition not true -->
<xacro:unless value="${check == 1}">
code for create B
</xacro:unless>
</robot>
macros#
macro
<?xml version="1.0"?>
<robot name="macro" xmlns:xacro="http://www.ros.org/wiki/xacro">
<xacro:macro name="default_origin" params="x y z">
<origin xyz="${x} ${y} ${z}" rpy="0 0 0"/>
</xacro:macro>
<xacro:default_origin x="1" y="2" z="3"/>
</robot>
output#
<?xml version="1.0" ?>
<robot name="macro">
<origin rpy="0 0 0" xyz="1 2 3"/>
</robot>
loops#
loops
<?xml version="1.0"?>
<robot name="loop" xmlns:xacro="http://www.ros.org/wiki/xacro">
<xacro:property name="items" value="${[1,2,3,4,5]}" />
<xacro:macro name="loop" params="items:=^">
<xacro:if value="${items}">
<!-- pop first item from list -->
<xacro:property name="item" value="${items.pop(0)}"/>
<item>${item}</item>
<!-- recursively call myself -->
<xacro:loop/>
</xacro:if>
</xacro:macro>
<xacro:loop items="${items}" />
</robot>
output#
<?xml version="1.0" ?>
<robot name="loop">
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
</robot>